/** 
 * Readable：可读流，用于接收数据
*/
'use strict'
import { Readable } from 'stream'
class ToReadable extends Readable {
  constructor(iterator) {
    super()
    this.iterator = iterator
  }

  // 子类需要实现该方法
  // 这是生产数据的逻辑
  _read() {
    const res = this.iterator.next()
    if (res.done) {
      // 数据源已枯竭，调用`push(null)`通知流
      return this.push(null)
    }
    setTimeout(() => {
      // 通过`push`方法将数据添加到流中
      this.push(res.value + '\n')
    }, 0)
  }
}
/**
 * Readable 可读流
 */
const iterable = function *(limit) {
  while (limit--) {
    yield Math.random()
  }
}(10)

const readable = new ToReadable(iterable)

// 监听`data`事件，一次获取一个数据
// readable.on('data', data => process.stdout.write(data))
readable.pipe(process.stdout)

// 所有数据均已读完
readable.on('end', () => process.stdout.write('READ DONE'))



